package gjbsh.bangong.ds.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import gjbsh.bangong.ds.dao.单位管理员Mapper;
import gjbsh.bangong.ds.model.单位;
import gjbsh.bangong.ds.model.单位管理员;
import gjbsh.bangong.ds.model.用户;
import gjbsh.bangong.ds.model.用户密码加密;
import gjbsh.support.DESCryption;

/**
 * @author yaolongjun
 * @date   2020年5月20日 下午5:57:13
 */
@Service
public class 单位管理员Service {
	
	@Autowired
	单位管理员Mapper ddMapper;
	
	@Autowired
	用户密码加密Service dd用户密码加密Service;
	
	@Autowired
	用户Service dd用户Service;
	
	@Autowired
	单位Service dd单位Service;
	
	// 查询
	public 单位管理员 findOne(String ppDeptmanageId) {
		return ddMapper.selectByPrimaryKey(ppDeptmanageId);
	}

	// 根据单位ID查询单位管理员
	public List<Map<String,Object>> findCustomByDeptId(String ppDeptId) {
		return ddMapper.findCustomByDeptId(ppDeptId);
	}

    //  根据单位ID和被查的单位id 判断是否有权限
	public List<Map<String, Object>> findShangjiByDeptId(String dengludeptid, String beichadeptid) {
		return ddMapper.findShangjiByDeptId(dengludeptid,beichadeptid);
	}

	// 根据单位管理员ID查询
	public Map<String,Object> findByDeptmanageId(String ppDeptmanageId) {
		return ddMapper.findByDeptmanageId(ppDeptmanageId);
	}
	
	// 修改
	public boolean modify(单位管理员 mmDeptmanage) {
		return ddMapper.updateByPrimaryKey(mmDeptmanage) == 1;
	}
	
	// 新增
	public boolean add(单位管理员 mmDeptmanage) {
		return ddMapper.insert(mmDeptmanage) == 1;
	}

	// 修改账号信息
	@Transactional
	public boolean modifyCustom(单位管理员 mmDeptmanage, 用户 mmUser, String ppLoginpassword) throws Exception {
		
		ppLoginpassword = ppLoginpassword.trim();
		
		if(!"".equals(ppLoginpassword)) {
			// 查询用户_密码加密
			String mmUserId = mmUser.get用户id();
			List<用户密码加密> mmYonghuMimajiamiList = dd用户密码加密Service.findByUserId(mmUserId);
			if(mmYonghuMimajiamiList.size() < 1) {
				用户密码加密 mmYonghuMimajiami = new 用户密码加密();
				mmYonghuMimajiami.set用户id(mmUserId);
				if(!dd用户密码加密Service.add(mmYonghuMimajiami)) {
					throw new RuntimeException("新增用户密码加密失败");
				}
			}
			
			// 密码加密
			DESCryption mmDESCryption = new DESCryption();
			String mmJiamipassword = mmDESCryption.encode(ppLoginpassword);
			mmUser.set登录密码(mmJiamipassword);
			
		}
		
		// 修改单位管理员
		if(!modify(mmDeptmanage)) {
			throw new RuntimeException("修改单位管理员失败");
		}
		
		// 修改用户
		if(!dd用户Service.modify(mmUser)) {
			throw new RuntimeException("修改用户失败");
		}
		
		return true;
	}

	// 新增单位管理员
	@Transactional
	public boolean addCustom(单位管理员 mmDeptmanage, 用户 mmUser, String ppLoginpassword) throws Exception {
		ppLoginpassword = ppLoginpassword.trim();
		
		用户密码加密 mmYonghuMimajiami = new 用户密码加密();
		String mmUserId = mmUser.get用户id();
		mmYonghuMimajiami.set用户id(mmUserId);
		if(!dd用户密码加密Service.add(mmYonghuMimajiami)) {
			throw new RuntimeException("新增用户密码加密失败");
		}
		
		// 密码加密
		DESCryption mmDESCryption = new DESCryption();
		String mmJiamipassword = mmDESCryption.encode(ppLoginpassword);
		mmUser.set登录密码(mmJiamipassword);
		
		
		// 修改单位管理员
		if(!add(mmDeptmanage)) {
			throw new RuntimeException("修改单位管理员失败");
		}
		
		// 修改用户
		if(!dd用户Service.add(mmUser)) {
			throw new RuntimeException("修改用户失败");
		}
		
		return true;
	}

	// 新增单位管理员
	@Transactional
	public boolean addCustomAll(单位管理员 mmDeptmanage, 用户 mmUser,单位 mmDept, String ppLoginpassword) throws Exception {
		ppLoginpassword = ppLoginpassword.trim();
		
		用户密码加密 mmYonghuMimajiami = new 用户密码加密();
		String mmUserId = mmUser.get用户id();
		mmYonghuMimajiami.set用户id(mmUserId);
		
		if(!dd用户密码加密Service.add(mmYonghuMimajiami)) {
			throw new RuntimeException("新增用户密码加密失败");
		}
		
		// 密码加密
		DESCryption mmDESCryption = new DESCryption();
		String mmJiamipassword = mmDESCryption.encode(ppLoginpassword);
		mmUser.set登录密码(mmJiamipassword);
		
		// 判断单位是否为空
		if(mmDept != null) {
			// 修改单位
			if(!dd单位Service.add(mmDept)) {
				throw new RuntimeException("修改单位失败");
			}
		}
			
		// 修改单位管理员
		if(!add(mmDeptmanage)) {
			throw new RuntimeException("修改单位管理员失败");
		}
		
		// 修改用户
		if(!dd用户Service.add(mmUser)) {
			throw new RuntimeException("修改用户失败");
		}
		
		return true;
	}
	

	

	
	
	

}
